package RIP;

/**
 * 
 */
public class main {

    public static void main(String argv[]) throws Exception {


        System.out.println("INIT:");


        node objNode0 = new node(RIP_Constants.NODE_0_ID);

        node objNode1 = new node(RIP_Constants.NODE_1_ID);

        node objNode2 = new node(RIP_Constants.NODE_2_ID);

        node objNode3 = new node(RIP_Constants.NODE_3_ID);


        objNode0.initTopology();
        objNode1.initTopology();
        objNode2.initTopology();
        objNode3.initTopology();


        objNode0.rtInit();
        objNode1.rtInit();
        objNode2.rtInit();
        objNode3.rtInit();

        //Envia tabela para os vizinhos
        objNode0.sendTableForNeighborhood();
        objNode1.sendTableForNeighborhood();
        objNode2.sendTableForNeighborhood();
        objNode3.sendTableForNeighborhood();

//        Pacotes que 0 recebe
        pacote pack_1_0 = new pacote(1, 0, objNode1.getDistanceTable());
        pacote pack_2_0 = new pacote(2, 0, objNode2.getDistanceTable());
        pacote pack_3_0 = new pacote(3, 0, objNode3.getDistanceTable());


        //Pacotes que 1 recebe
        pacote pack_0_1 = new pacote(0, 1, objNode0.getDistanceTable());
        pacote pack_2_1 = new pacote(2, 1, objNode2.getDistanceTable());


        //Pacotes que 2 recebe
        pacote pack_0_2 = new pacote(0, 2, objNode0.getDistanceTable());
        pacote pack_1_2 = new pacote(1, 2, objNode1.getDistanceTable());
        pacote pack_3_2 = new pacote(3, 2, objNode3.getDistanceTable());

        //Pacotes que 3 recebe
        pacote pack_0_3 = new pacote(0, 3, objNode0.getDistanceTable());
        pacote pack_2_3 = new pacote(2, 3, objNode2.getDistanceTable());



        //Atualiza 0
        objNode0.rtUpdate(pack_1_0);
        objNode0.rtUpdate(pack_2_0);
        objNode0.rtUpdate(pack_3_0);

        //Atualiza 1
        objNode1.rtUpdate(pack_0_1);
        objNode1.rtUpdate(pack_2_1);


        //Atualiza 2
        objNode2.rtUpdate(pack_0_2);
        objNode2.rtUpdate(pack_1_2);
        objNode2.rtUpdate(pack_3_2);

        //Atualiza 3
        objNode3.rtUpdate(pack_0_3);
        objNode3.rtUpdate(pack_2_3);



        //Atualiza 0
        objNode0.rtUpdate(pack_1_0);
        objNode0.rtUpdate(pack_2_0);
        objNode0.rtUpdate(pack_3_0);

        //Atualiza 1
        objNode1.rtUpdate(pack_0_1);
        objNode1.rtUpdate(pack_2_1);


        //Atualiza 2
        objNode2.rtUpdate(pack_0_2);
        objNode2.rtUpdate(pack_1_2);
        objNode2.rtUpdate(pack_3_2);

        //Atualiza 3
        objNode3.rtUpdate(pack_0_3);
        objNode3.rtUpdate(pack_2_3);




        //Mostra os nós
//        objNode0.print();
//        objNode1.print();
//        objNode2.print();
//        objNode3.print();
//  


        objNode0.print();
        objNode1.print();
        objNode2.print();
        objNode3.print();


    }
}
